很常在音樂撥放軟體可以看到調整音量功能,透過seekBar即可拉動調整音量大小,那麼是怎麼做到的呢?今天就來跟各位介紹一下,如何在APP內監控到手機音量。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="聲音調整"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.103" />
<SeekBar
android:id="@+id/music_seekBar"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/guideline2"
app:layout_constraintEnd_toStartOf="@+id/guideline9"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline3"
app:layout_constraintVertical_bias="1.0" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.25" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2" />
<Button
android:id="@+id/up_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Up"
app:layout_constraintEnd_toStartOf="@+id/guideline7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline8" />
<Button
android:id="@+id/down_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Down"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.54"
app:layout_constraintStart_toStartOf="@+id/guideline7"
app:layout_constraintTop_toTopOf="@+id/guideline8" />
<ImageView
android:id="@+id/imageView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/guideline2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/music_seekBar"
app:layout_constraintTop_toTopOf="@+id/guideline3"
app:srcCompat="@drawable/ic_baseline_music_note_24" />
</androidx.constraintlayout.widget.ConstraintLayout>
準備好以上就可以開始設定拉~
//取得AudioManager
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
private void initSeekBarVolume() {
//取得目前及最大音量
//STREAM_MUSIC(音樂)
//最大聲
int mMusicMaxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//目前聲音
int mMusicCurrentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
music_seekBar.setMax(mMusicMaxVolume);
music_seekBar.setProgress(mMusicCurrentVolume);
}
透過AudioManager.STREAM_MUSIC可以獲取有關音樂大小的調整,如果有別的需求也可以選擇不同的類型,如下。
記得每種類型的MaxVolume可能不太一樣,需要注意一下,不然設定錯誤時,調整起來會很奇怪喔。
//STREAM_MUSIC(音樂)
music_seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//滑動時
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
progress,AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
}
//觸碰到seekBar時
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
//停止移動seekBar時
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
其中setStreamVolume()包含了flag設定,常見flag如下。
//向上調節
up_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC
,AudioManager.ADJUST_RAISE,AudioManager.FLAG_PLAY_SOUND);
initSeekBarVolume();
}
});
//向下調節
down_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC
,AudioManager.ADJUST_LOWER,AudioManager.FLAG_PLAY_SOUND);
initSeekBarVolume();
}
});
adjustStreamVolume()可以直接調節音量,帶入參數分別為(類型,調整方向,Flag標籤)。
以上就完成了調節音量的功能拉,希望有幫助到想要自己製作音約撥放或相關app的同學~